# -*- coding: utf-8 -*-
"""
@Time : 2024/9/29 20:46
@Author : ChenXiaoliang
@Email : middlegod@sina.com
@File : generate_audio.py
"""
import sys

import pyttsx3
from moviepy.editor import AudioFileClip, concatenate_audioclips, CompositeAudioClip


def generate_audio(text, bgm='no'):
    """
    生成视频的最终音频文件
    :param text:
    :param bgm: 默认no 无背景音乐 取值范围 no / yes
    :return:
    """
    engine = pyttsx3.init()
    voices = engine.getProperty('voices')
    for voice in voices:
        if "Chinese" in voice.name:
            engine.setProperty('voice', voice.id)
            break
    # print("当前语速：", engine.getProperty('rate'))
    engine.setProperty('rate', 200)
    engine.setProperty('volume', 2.0)
    # engine.say(text)

    engine.save_to_file(text, 'audio_without_cover_time.mp3')
    engine.runAndWait()

    # 以下为在已有的音频文件上添加封面展示时长的静音音频
    audio_clip = AudioFileClip('audio_without_cover_time.mp3')

    # 创建一个持续某固定时间的静音音频  ！要求——时长与封面的展示时间严格保持一致！
    # 读取特定时间段的静音音频文件
    silent_audio_clip = AudioFileClip('silent_audio_2s.mp3')

    # 将静音音频文件与原有音频文件合并
    final_audio_clip_without_bgm = concatenate_audioclips([silent_audio_clip, audio_clip])

    # 设置bgm
    if bgm.lower() == 'no':
        final_audio_clip_without_bgm.write_audiofile('final_audio.mp3', bitrate='500k')
    elif bgm.lower() == 'yes':
        bgm_audio_clip = AudioFileClip('bgm.mp3')
        bgm_audio_clip = bgm_audio_clip.volumex(0.1)
        bgm_audio_clip = bgm_audio_clip.audio_loop(duration=final_audio_clip_without_bgm.duration)
        # 增加音频淡出效果
        bgm_audio_clip = bgm_audio_clip.audio_fadeout(duration=2)

        # mix 混合
        mixed_audio_clip = CompositeAudioClip([final_audio_clip_without_bgm, bgm_audio_clip])

        # 增加音频淡入效果
        mixed_audio_clip = mixed_audio_clip.audio_fadein(duration=2)

        # # 增加音频淡出效果
        # mixed_audio_clip = mixed_audio_clip.audio_fadeout(duration=2)

        mixed_audio_clip.write_audiofile('final_audio.mp3', bitrate='500k', fps=44100)
    else:
        sys.exit("背景音乐的值 非法设置")


if __name__ == "__main__":
    text_info = """大雨落幽燕，
白浪滔天，
秦皇岛外打鱼船。
一片汪洋都不见，
知向谁边？
往事越千年，
魏武挥鞭，
东临碣石有遗篇。
萧瑟秋风今又是，
换了人间。"""
    generate_audio(text_info, bgm='yes')
